﻿Imports System.Text

'********************************************************************************
'*
'*      テープUV　フォーム
'*
'*      File Name : frmStartCompleteTapeUV.vb
'*      Title     : テープUV着工/完了画面
'*      機能    　：テープUV工程
'*
'********************************************************************************
'----------------------------------<<修正履歴>>----------------------------------
'ﾊﾞｰｼﾞｮﾝ   日付       作業者        ｺﾒﾝﾄ
'--------- ---------- ------------ -----------------------------------------------
' V1.0.0   2016/09/14 S.Yu         新規作成
' V2.0.0   2017/06/09 M.Maho       蘇州対応
' V3.0.0   2017/01/09 M.kizawa     北京対応
'********************************************************************************


Public Class frmStartCompleteTapeUV

    ' キャリア交換対応 実行モード
    '0:表示 1:着工 2:製造完成 3:計上完成
    Private execMode As String = VIEW

    'タブコントロールの設定
    Public Overrides Sub SetTabControl()
        TabPageEqp.Enabled = False
    End Sub

    ' 着工前チェック項目：ウェハケースNo、リミットタイム
    Enum SCORE_NUM As Integer
        WAFERCASE
        LIMITTIME
    End Enum
    '照合結果設定
    Public Overrides Sub SetPassScore()
        PASS_SCORE = 2
        ReDim m_iScore(PASS_SCORE - 1)
        m_iScore = {PASS_SCORE_WAIT_CHECK, PASS_SCORE_WAIT_CHECK}
    End Sub

    '照合結果クリア
    Public Overrides Sub InitualizeCollData()
        m_iScore = {PASS_SCORE_WAIT_CHECK, PASS_SCORE_WAIT_CHECK}
    End Sub

    'イベント設定
    Public Overrides Sub SetHandler()

    End Sub

    'Lot Noでデータベースからデータを取得する
    Public Overrides Sub GetDataByIcTag()

        '初期化
        InputDataClear()

        'ICタグのデータで画面を設定する
        SetFromTag()
        setGridViewLot()

        If String.IsNullOrEmpty(IcTag.szUID) Then
            IcTag = LastTag
        End If

        '条件テーブル取得
        setJyokenData()

        '製造条件の設定
        Dim JyokenlimitTime = String.Empty
        Dim JyokenlimitCode = String.Empty
        For Each dr In dtJyokenData.Rows
            ' リミットタイムを取得
            If DBNullTOblank(dr(KOMOKUNAME)).Equals(lbl0200.Tag + " BASE PROC") Then 'UPD MIAO 2018/11/1
                JyokenlimitCode = DBNullTOblank(dr(KOMOKUDATA)) 'UPD MIAO 2018/11/1
            ElseIf DBNullTOblank(dr(KOMOKUNAME)).Equals(lbl0200.Tag + " HOUR") Then 'UPD MIAO 2018/11/1
                JyokenlimitTime = DBNullTOblank(dr(KOMOKUDATA)) 'UPD MIAO 2018/11/1
            End If
        Next

        '工程明細テーブル取得
        setDetailData()

        If IcTag.Status = TagProcessStatus.Ready Then
            '前工程情報取得、設定
            If Not String.IsNullOrEmpty(IcTag.container1) Then
                'ウェハケースNoの製造条件
                lbl0103.Text = IcTag.container1
                m_iScore(SCORE_NUM.WAFERCASE) = PASS_SCORE_CHECKED
            Else
                lbl0103.BackColor = ERROR_INIT_COLOR
                MsgBox(getMsgStr("MSG10019"))
            End If
        Else
            '着工後は履歴データを表示
            '現物型式の設定
            For Each dr In dtDetailData.Rows
                If DBNullTOblank(dr("MNF_CND_TAG")).Equals(lbl0100.Tag) Then 'UPD MIAO 2018/11/1
                    'ウェハケースNoの現物型式
                    lbl0103.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                End If
            Next
        End If

        ' リミットタイムの設定
        SetLimitTime(JyokenlimitTime, JyokenlimitCode)

        '工程ヘッダーテーブル取得
        getHeadData()

        'ヘッダーの設定　1週目begintime追加
        With m_dtMat
            If .Rows.Count > 0 Then
                '着完情報
                DisplayDate()
            Else
                If m_dtMat.Columns.Count > 0 Then
                    .Rows.Add()
                Else
                    .Columns.Add("BEGIN_TIME")
                    .Rows.Add()
                End If
            End If
        End With

        If IcTag.Status = TagProcessStatus.Ready Then
            ' 着工判定
            CheckCollScore()
        End If
    End Sub

    ''' <summary>
    ''' リミットタイムの設定と期限チェック
    ''' </summary>
    ''' <param name="JyokenlimitTime">製造条件のリミットタイム</param>
    Private Sub SetLimitTime(JyokenlimitTime As String, JyokenLimitCode As String)
        If IcTag.Status = TagProcessStatus.Ready Then
            '前工程の完成日時を取得する
            Dim dt_limitTime = m_cEquipMat.getMaxComplete_Time(IcTag.szLotNo, JyokenLimitCode)

            '完成日時+jyokendataから取得した時間を表示し、現在時刻と判定する
            If IsNothing(dt_limitTime) Then
                lbl0201.BackColor = ERROR_INIT_COLOR
                MsgBox(getMsgStr("MSG10019"))
            ElseIf String.IsNullOrEmpty(JyokenlimitTime) Then
                lbl0201.BackColor = ERROR_INIT_COLOR
                MsgBox(getMsgStr("MSG10020", lbl0200.Text))
            Else
                Dim preTime = CDate(dt_limitTime(0)("COMPLETE_TIME"))
                Dim limitTime = preTime.AddHours(CInt(JyokenlimitTime))
                lbl0201.Text = limitTime.ToString()
                If limitTime > m_cData.GetServerTime() Then
                    lbl0201.BackColor = NORMAL_INIT_COLOR
                    m_iScore(SCORE_NUM.LIMITTIME) = PASS_SCORE_CHECKED
                Else
                    lbl0201.BackColor = ERROR_INIT_COLOR
                    MsgBox(getMsgStr("MSG00115"))
                End If
            End If
        Else
            '着工後は履歴データを表示
            For Each dr In dtDetailData.Rows
                If dr("MNF_CND_TAG").Equals(lbl0200.Tag) Then
                    lbl0201.Text = dr("ACTUAL_MODEL")
                End If
            Next
        End If
    End Sub

    '画面データ保存（着工時）
    Public Overrides Function SaveEquipMat(ByRef szBeginTime As DateTime) As Boolean
        ' 実行モード変更
        execMode = BEGIN
        If saveDetail(BEGIN) < 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    '画面データ保存（製造完成）
    Public Overrides Function SaveCompleteInfo(Optional ByVal status As ProcessStatus = ProcessStatus.ManufComplete) As Integer
        ' 実行モード変更
        execMode = COMPLETE
        dtDBUpd.Clear()
        Return saveDetail(COMPLETE)
    End Function

    '画面データ保存（計上完成）
    Public Overrides Function SaveTotalInfo() As Integer
        ' 実行モード変更
        execMode = TOTAL
        dtDBUpd.Clear()
        Return saveDetail(TOTAL)
    End Function

    '工程明細テーブル更新処理
    Private Function saveDetail(ByVal type As String) As Integer
        setLotData()
        Dim rowsCnt As Integer = dtDBUpd.Rows.Count
        Dim addIndex As Integer = 0

        'ウェハケースNo
        dtDBUpd.Rows.Add()
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0100.Tag
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = MNF_CND_TAG_FLG_OTHER
        dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
        dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = lbl0103.Text
        addIndex += 1

        'リミットタイム
        dtDBUpd.Rows.Add()
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0200.Tag
        dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = MNF_CND_TAG_FLG_OTHER
        dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
        dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = lbl0201.Text
        addIndex += 1

        Return m_cEquipMat.SaveDetail(lotNo, IcTag.szProcsCD, type,
                                      m_szTable, dtDBUpd, m_dtHeader,
                                      m_cIdohyo.EquipInfo.szEquipNo, serverTime)
    End Function

    '計上完成時チェック処理 
    Public Overrides Function EndCheck() As Boolean
        '>>20180302 大賀 GroupKey入力時ウェハ枚数入力
        If Not CheckInputWaferNum() Then
            Return False
        End If
        '<<20180302 大賀 GroupKey入力時ウェハ枚数入力
        Return True
    End Function

    '初期化、背景色の設定
    Public Sub InputDataClear()

        ' 実行モード変更
        execMode = VIEW

        'ロットタブの初期化
        clearActualModel()

        'ウェハケース
        lbl0103.Text = String.Empty
        lbl0103.BackColor = NORMAL_INIT_COLOR

        'リミットタイム
        lbl0201.Text = String.Empty
        lbl0201.BackColor = NORMAL_INIT_COLOR

    End Sub

    Public Overrides Sub ConfScreenItem()
        If txtLotNo.TextLength > 0 Then
            If IcTag.Status = TagProcessStatus.Ready Then
                '着工待ち
            ElseIf IcTag.Status = TagProcessStatus.Processing Then
                '着工中
            ElseIf IcTag.Status = TagProcessStatus.ManufComplete Then
                '製造完成
            Else
                'その他エラー
                MsgBox(getMsgStr("MSG00025"))
            End If
        End If
    End Sub

    '計上完成正常時の画面初期化
    Protected Overrides Sub initializForm()
        MyBase.initializForm()
        InputDataClear()
    End Sub

    'IcTag保存内容設定 キャリア交換対応
    Protected Overrides Sub icTagDataSet()
        '製造完成、計上完成時は画面入力値の値を設定する。
        If execMode.Equals(COMPLETE) Or execMode.Equals(TOTAL) Then
            'CASEの値は変更しないため何も処理しない。
        Else
            '初期値をそのまま保存するため、変更しない。
        End If
    End Sub


End Class